package reflect.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD) //表示只能使用在方法上
@Retention(RetentionPolicy.RUNTIME) //表示在注解可以被反射机制访问
public @interface AutoRunMethod {

    /*
     * 可以在注解中定义参数
     * 语法:
     * 类型 参数名() [default 默认值]
     * 默认值是可选项，若不制定默认值，name在使用注解是必须为该参数传值
     *
     *
     * 参数规则
     * 实际使用注解是，为参数传值格式
     * @注解名(参数名1=参数值,[参数名2=参数值,参数名3=参数值])
     *
     * 例如:
     * @AutoRunMethod上定义了两个参数
     * String name();
     * int age();
     * 实际的写法
     * @AutoRunMethod(name="张三",age=15)
     *
     * 如果注解仅定义一个参数时，建议参数的名字为value 这样外界在使用该注解时传递参数可以免去指定参数名
     *
     * 当注解中存在一个参数的时候
     * 建议直接将参数名设置为value
     * 如
     * @interface AutoRunMethod{
     *   int value();
     * }
     * 添加注解时
     * @AutoRUnMethod(13) 当只有一个参数并且参数名为value时，可以直接在()中写入参数值
     *
     * 当注解中存在多个参数的时候
     * 如
     * @interface AutoRunMethod{
     *   String name();
     *   int age();
     * }
     * 添加注解时
     * @AutoRUnMethod(name="张三",age=15)
     * 当存在多个参数时，通过参数名=参数值,参数名1=参数值复制
     *
     * */
    int value() default 1;
}
